

//生成uuid
import fs from "fs";
import * as XLSX from "xlsx";
import {streamToBuffer} from "@/utils/fileUtils";
import path from "path";

function generateUUID () {
  let d = new Date().getTime()
  if (window.performance && typeof window.performance.now === 'function') {
    // use high-precision timer if available
    d += performance.now()
  }
  let uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
    let r = (d + Math.random() * 16) % 16 | 0
    d = Math.floor(d / 16)
    return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16)
  })
  return uuid
}
//获取时间戳
export const  getNowMilliSecond=()=> {
  return Math.floor(Date.now())
}
//获取时间 yyyy-MM-dd HH:mm:ss
export const getcurDate=()=> {
  let currentDate = new Date()
  let year = currentDate.getFullYear().toString()
  let month = (currentDate.getMonth() + 1).toString()
  if (month.length === 1) {
    month = '0' + month
  }
  let date = currentDate.getDate().toString()
  if (date.length === 1) {
    date = '0' + date
  }
  let hour = currentDate.getHours().toString()
  if (hour.length === 1) {
    hour = '0' + hour
  }
  let minute = currentDate.getMinutes().toString()
  if (minute.length === 1) {
    minute = '0' + minute
  }
  let second = currentDate.getSeconds().toString()
  if (second.length === 1) {
    second = '0' + second
  }
  return year + '-' + month + '-' + date + ' ' + hour + ':' + minute + ':' + second
}
//获取时间 yyyy-MM-dd
export const getcurnOWDate=()=> {
  let currentDate = new Date()
  let year = currentDate.getFullYear().toString()
  let month = (currentDate.getMonth() + 1).toString()
  if (month.length === 1) {
    month = '0' + month
  }
  let date = currentDate.getDate().toString()
  if (date.length === 1) {
    date = '0' + date
  }
  return year + '-' + month + '-' + date
}
export const getSize=(file) =>{
  if (fs.existsSync(file) && fs.lstatSync(file).isFile()) {
    try {
      const stats = fs.statSync(file);
      return stats.size;
    } catch (e) {
      console.error(e);
    }
  } else {
    console.debug('file not exist!');
  }
  return 0;
}

export  const getLengthId=(length)=>{
  return Number(Math.random().toString().substr(3,length) + Date.now()).toString(36);
}

export const getStatusType=(type)=>{
  if (type === (1+"")) {
    return '待审批';
  } else if (type === (2+"")) {
    return '审批通过';
  }  else if (type === (3+"")) {
    return '审批未通过';
  }else if (type === (4+"")) {
    return '进一步更改待审批';
  }else if (type === (5+"")) {
    return '进一步整改通过';
  }else if (type === (6+"")) {
    return '进一步整改未通过';
  }else {
    return '';
  }
}
// 0：A：聚焦基层贯彻落实党的路线方针政策和党中央决策部署情况，进一步促进基层党组织和党员干部担当作为
//
// 1：B：聚焦群众身边腐败问题和不正之风，进一步增强群众获得感幸福感安全感
//
// 2：C：聚焦基层党组织软弱涣散，组织力欠缺问题，进一步强化政治功能、打造坚强战斗堡垒
//
// 3：D：整改落实情况
export const getProblemType=(type)=>{
  if (type === (0+"")) {
    return 'A：聚焦基层贯彻落实党的路线方针政策和党中央决策部署情况，进一步促进基层党组织和党员干部担当作为';
  } else if (type === (1+"")) {
    return 'B：聚焦群众身边腐败问题和不正之风，进一步增强群众获得感幸福感安全感';
  }  else if (type === (2+"")) {
    return 'C：聚焦基层党组织软弱涣散，组织力欠缺问题，进一步强化政治功能、打造坚强战斗堡垒';
  }else if (type === (3+"")) {
    return 'D：整改落实情况';
  }else {
    return '--';
  }
}
export const getZGType=(type)=>{
  if (type === (1+"")) {
    return '立即整改';
  } else if (type === (2+"")) {
    return '长期整改';
  }  else if (type === (3+"")) {
    return '无法整改';
  }else {
    return '--';
  }
}
export const getZGTypeResv=(type)=>{
  if (type === ("立即整改")) {
    return '1';
  } else if (type === ("长期整改")) {
    return '2';
  }  else if (type === ("无法整改")) {
    return '3';
  }else {
    return '--';
  }
}
export const getLDType=(type)=>{
  if (type === (0+"")) {
    return '待审批';
  }else if (type === (1+"")) {
    return '通过';
  } else if (type === (2+"")) {
    return '不通过';
  }else if (type === (3+"")) {
    return '进一步整改待审批';
  }  else {
    return '--';
  }
}
export const getComType=(type)=>{
  if (type === (1+"")) {
    return '未完成';
  } else if (type === (2+"")) {
    return '已完成';
  } else {
    return '--';
  }
}
export const getComTypeResv=(type)=>{
  if (type === ("未完成")) {
    return '1';
  } else if (type === ("已完成")) {
    return '2';
  } else {
    return '--';
  }
}
export const getTimeBetween=(startdate,enddate,date)=>{
  var d1 = new Date(startdate);
  var d2 = new Date(enddate);
  var d3 = new Date(date);
  if (d3 >= d1 && d3 <= d2) {
    return true
  } else {
    return false
  }
}


export const formatDate=(value, format)=>{
  const formatNumber = n => `0${n}`.slice(-2)
  const date = value
  const formatList = ['Y', 'M', 'D', 'h', 'm', 's']
  const resultList = []
  resultList.push(date.getFullYear().toString())
  resultList.push(formatNumber(date.getMonth() + 1))
  resultList.push(formatNumber(date.getDate()))
  resultList.push(formatNumber(date.getHours()))
  resultList.push(formatNumber(date.getMinutes()))
  resultList.push(formatNumber(date.getSeconds()))
  for (let i = 0; i < resultList.length; i++) {
    format = format.replace(formatList[i], resultList[i])
  }
  return format
}
export const s2b = s => {
  var buf;
  if (typeof ArrayBuffer !== 'undefined') {
    buf = new ArrayBuffer(s.length)
    var view = new Uint8Array(buf)
    for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xff
    return buf
  } else {
    buf = new Array(s.length);
    for (var i = 0; i != s.length; ++i) buf[i] = s.charCodeAt(i) & 0xFF;
    return buf;
  }
}


export  const importsExcel = async (file) => {
  // 使用promise导入
  return new Promise((resolve, reject) => {
    // 获取上传的文件对象
    const { files } = file.target; // 获取里面的所有文件
    console.log('f---', file);
    // 通过FileReader对象读取文件
    const fileReader = new FileReader();

    fileReader.onload = (event) => { // 异步操作  excel文件加载完成以后触发
      try {
        const result = event.target?.result;
        // 以二进制流方式读取得到整份excel表格对象
        const workbook = XLSX.read(result, { type: 'binary', cellDates: true, dateNF: 'YYYY-MM-DD' });
        let data = []; // 存储获取到的数据
        // 遍历每张工作表进行读取（这里默认只读取第一张表）
        for (const sheet in workbook.Sheets) {
          // eslint-disable-next-line no-prototype-builtins
          if (workbook.Sheets.hasOwnProperty(sheet))
            data = data.concat(XLSX.utils.sheet_to_json(workbook.Sheets[sheet]));
        }
        console.log('res--', data);
        resolve(data);// 导出数据
      }
      catch (e) {
        console.log('res1--', e);
        // 这里可以抛出文件类型错误不正确的相关提示
        // eslint-disable-next-line prefer-promise-reject-errors
        reject('失败');// 导出失败
      }
    };
    // 以二进制方式打开文件
    fileReader.readAsBinaryString(files[0]);
  });
}

export const downLoadFunction=(url,fname)=>{
  let fileb = fs.createReadStream(url)
  streamToBuffer(fileb).then(res => {
    let data = res
    let contents = new Uint8Array(data.length)
    for (let i = 0; i < data.length; i++) {
      contents[i] = data[i]
    }
    saveAs.saveAs(new Blob([contents], { type: 'application/zip' }), fname)
  })
}

export const getAppLocalPath=()=>{
  let local_path = ""
  let platform = process.platform;
  if (platform === 'win32') {
    // 处理Windows平台的路径
    local_path=""
  } else if (platform === 'linux') {
    // 处理Linux平台的路径
    local_path=path.join(__dirname,"..").replace("resources","")
  } else {
    // 处理其他平台的路径
  }
  return local_path
}
export const  getSystemDir=()=> {
  // 获取保存路径
  // eslint-disable-next-line node/handle-callback-err
  //path = fs.readFileSync('dbson/Filepath.dbson', 'utf-8')
  let  pathlocal= path.resolve('./chrtc')
  let platform = process.platform;
  if (platform === 'win32') {
    // 处理Windows平台的路径
    pathlocal=path.resolve('./chrtc')
    if(!fs.existsSync(pathlocal)){
      fs.mkdirSync(pathlocal)
    }
  } else if (platform === 'linux') {
    // 处理Linux平台的路径
    pathlocal=path.join(__dirname,"..").replace("resources","")+"/chrtc"
    if(!fs.existsSync(pathlocal)){
      fs.mkdirSync(pathlocal)
    }
  } else {
    // 处理其他平台的路径
  }
  return pathlocal
}

export function checkDiffList(oldList, newList){
  // 找出需要新增的元素
  const toAdd = newList.filter((newItem) => {
    return !oldList.some((oldItem) => oldItem.id === newItem.ID_);
  });
  // 找出需要删除的元素
  const toRemove = oldList.filter((oldItem) => {
    return !newList.some((newItem) => newItem.ID_ === oldItem.id);
  });
  // 合并两个列表
  const mergedList = [...oldList, ...toAdd].filter((item) => {
    return !toRemove.some((removeItem) => removeItem.id === item.id);
  });
  // 返回新增、删除的元素和合并后的列表
  return { toAdd, toRemove, mergedList };
}
//合并研究整改的审批记录
export function checkDiffListYJZG(oldList, newList){
  // 找出需要新增的元素
  const toAdd = newList.filter((newItem) => {
    return !oldList.some((oldItem) => oldItem.ID_ === newItem.ID_);
  });
  // 找出需要删除的元素
  const toRemove = oldList.filter((oldItem) => {
    return !newList.some((newItem) => newItem.ID_ === oldItem.ID_);
  });
  // 合并两个列表
  const mergedList = [...oldList, ...toAdd].filter((item) => {
    return !toRemove.some((removeItem) => removeItem.ID_ === item.ID_);
  });
  // 返回新增、删除的元素和合并后的列表
  return { toAdd, toRemove, mergedList };
}
export async function staff_import_template(name, columns, list, num) {
  const FileSaver = require('file-saver')
  const ExcelJS = require('exceljs')
  const wb = new ExcelJS.Workbook()
  const Sheet1 = wb.addWorksheet(name) // 新建工作表，可以建多个
  Sheet1.columns = columns // 设置表头，(key, 宽度)
  // Sheet1.columns = [ // 表头格式如下
  //   {
  //     header: '编号',
  //     key: 'no',
  //     width: 20
  //   }, // A1
  //   {
  //     header: '姓名',
  //     key: 'name',
  //     width: 20
  //   }, // B2
  // ]

  // const list = [ // 表格数据格式如下
  //   {
  //     no: '1',
  //     name: '小红',
  //     sex: '女',
  //     sexVal: '0'
  //   }
  // ]

  Sheet1.addRows(list) // 设置表格数据
  // 表示循环1000行
  new Array(list.length).fill(0).forEach((_, idx) => {
    const row = idx + 2
    // 渲染下拉框  参数(行，列) row表示每行 可以单独写哪一列
    if(num===7){
      //设置提示信息
      Sheet1.getCell(row, 11).note = '文本格式：yyyy-mm-dd';
      Sheet1.getCell(row, num).dataValidation = {
        type: 'list',
        formulae: ['"立即整改,无法整改,长期整改"'], // 下拉列表的值   ⚠一定要是外面单引号，里面双引号
        showErrorMessage: true // 向用户显示适当的错误消息（如果他们弄错了）
        // errorStyle: 'error', // 错误样式
        // errorTitle: 'Five', // 错误标题
        // error: 'The value must not be Five'， // 错误提示文本
        // promptTitle: 'Decimal', // // 添加“工具提示”以帮助指导用户
        // prompt: 'The value must between 1.5 and 7', // 工具提示文本
        // formulae: [15], // 指定单元格的文本长度必须小于15
        // formulae: [new Date(2016,0,1)] // 指定单元格必须是2016年1月1日之前的日期
      }
    }
    if(num===14){
      Sheet1.getCell(row, num).dataValidation = {
        type: 'list',
        formulae: ['"未完成,已完成"'], // 下拉列表的值   ⚠一定要是外面单引号，里面双引号
        showErrorMessage: true // 向用户显示适当的错误消息（如果他们弄错了）
        // errorStyle: 'error', // 错误样式
        // errorTitle: 'Five', // 错误标题
        // error: 'The value must not be Five'， // 错误提示文本
        // promptTitle: 'Decimal', // // 添加“工具提示”以帮助指导用户
        // prompt: 'The value must between 1.5 and 7', // 工具提示文本
        // formulae: [15], // 指定单元格的文本长度必须小于15
        // formulae: [new Date(2016,0,1)] // 指定单元格必须是2016年1月1日之前的日期
      }
    }
  })
  let rowIndex = 1;
  for (rowIndex; rowIndex <= Sheet1.rowCount; rowIndex++) {
    Sheet1.getRow(rowIndex).alignment = { vertical: 'middle',wrapText: true };
  }
  const buffer = await wb.xlsx.writeBuffer() // 创建文件流
  FileSaver.saveAs(new Blob([buffer]), name+"_"+getcurDate()+".xlsx") // 保存文件，使用 file-saver 库
  console.log(Sheet1)
  return
}
